gusucode.com > C++ 宽带自动拨号程序源码 > C++ 宽带自动拨号程序源码/code/Unit1.cpp

    //---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <inifiles.hpp>
#include "Unit1.h"
#include <ras.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma link "DialUp"
#pragma resource "*.dfm"

TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
        : TForm(Owner),m_InitFlag(true),m_RunFlag(false),m_DownloadComplete(false),m_WaitTime(10)//,m_Dialup(NULL)
{
}

__fastcall TfrmMain::~TfrmMain()
{
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
    cbConn->Items = DialUp1->PossibleConnections; //m_Dialup->PossibleConnections;
    //  装入配置
    TIniFile * ini = new TIniFile(getConfigName());
    edName->Text = ini->ReadString("Config","Name","");
    edPwd->Text = ini->ReadString("Config","Password","");
    edURL->Text = ini->ReadString("Config","URL","");
    AnsiString strConn = Trim(ini->ReadString("Config","Connect",""));
    cbConn->ItemIndex = cbConn->Items->IndexOf(strConn);
    m_WaitTime = ini->ReadInteger("Config","Interval",10);
    edInterval->Text = m_WaitTime;

    delete ini;
    //  确定线路
    m_InitFlag = false;
}
//---------------------------------------------------------------------------

AnsiString __fastcall TfrmMain::getConfigName()
{
    return ExtractFilePath(Application->ExeName) + "config.ini";
}
void __fastcall TfrmMain::btAutoClick(TObject *Sender)
{
    //
    if( !CheckInput() ) return;
    try
    {
        DialUp1->Username = edName->Text;
        DialUp1->Password = edPwd->Text;
        DialUp1->ConnectTo = cbConn->Text;
        m_RunFlag = true;
        setEnabled(false);
        while(m_RunFlag)
        {
            Dialup();
            Application->ProcessMessages();
        }
    }
    catch(...)
    {
        ShowMessage("连接失败,请检查帐号密码和线路是否连接正确!");
        InfoLog("连接失败,请检查帐号密码和线路是否连接正确!");
        setEnabled(true);
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::SaveConfig()
{
    TIniFile * ini = new TIniFile(getConfigName());
    ini->WriteString("Config","Name",edName->Text);
    ini->WriteString("Config","Password",edPwd->Text);
    ini->WriteString("Config","URL",edURL->Text);
    ini->WriteString("Config","Connect",cbConn->Text);
    ini->WriteInteger("Config","Interval",m_WaitTime);
    delete ini;

}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::edNameChange(TObject *Sender)
{
    if( !m_InitFlag )
    {
        SaveConfig();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::setEnabled(bool v)
{
    edName->Enabled = v;
    edPwd->Enabled = v;
    edURL->Enabled = v;
    btAuto->Enabled = v;
    btStop->Enabled = !v;
    cbConn->Enabled = v;

}
//---------------------------------------------------------------------------
bool __fastcall TfrmMain::CheckInput()
{
    if( edName->Text.IsEmpty() )
    {
        ShowMessage("您没有输入ADSL账号!请确认");
        PageControl1->ActivePage = TabSheet1;
        edName->SetFocus();
        return false;
    }
    if( edPwd->Text.IsEmpty() )
    {
        ShowMessage("您没有输入密码!请确认");
        PageControl1->ActivePage = TabSheet1;
        edPwd->SetFocus();
        return false;
    }
    if( cbConn->Text.IsEmpty() )
    {
        ShowMessage("您没有选择连接线路!请确认");
        PageControl1->ActivePage = TabSheet1;
        cbConn->SetFocus();
        return false;
    }
    if( edURL->Text.IsEmpty() )
    {
        ShowMessage("您没有输入URL,请确认!");
        PageControl1->ActivePage = TabSheet2;
        edURL->SetFocus();
        return false;
    }

    return true;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Dialup()
{
    InfoLog("开始拨号...");
    DialUp1->GoOffline();
    if( DialUp1->GoOnline() )
    {
        AnsiString strConn;
        do
        {
            strConn = DialUp1->CurrentConnection;
            Delay(1);
        }
        while( strConn == "" && m_RunFlag );

        InfoLog(strConn);

        if( m_RunFlag )
        {
            InfoLog("拨号成功!");
        }

        Delay(10);
        static AnsiString strIP;
        strIP = getLocalIP();
        InfoLog("IP地址为:"+strIP);
        LogIP->Lines->Add(strIP);
        m_DownloadComplete = false;
        webBrowser->Navigate(WideString(edURL->Text));
        while( !m_DownloadComplete && m_RunFlag ) Delay(1);
        if( m_DownloadComplete ) InfoLog("连接"+edURL->Text+"成功!");
        Delay(10);
        InfoLog("断线!");
        DialUp1->GoOffline();
        do
        {
            strConn = DialUp1->CurrentConnection;
            Delay(1);
        }
        while( strConn != "" && m_RunFlag );
        for(int i=0; i < m_WaitTime && m_RunFlag; i++)
        {
            InfoLog("等了第 " + IntToStr(i) + " 秒");
            Delay(20);
        }
    }
    else throw "";
}
//---------------------------------------------------------------------------
#define NAME_SIZE 255
AnsiString __fastcall TfrmMain::getLocalIP()
{
    AnsiString strIP;
    RASPPPIP * lpProjection = new RASPPPIP();
    memset(lpProjection,0,sizeof(RASPPPIP));
    lpProjection->dwSize = sizeof(RASPPPIP);
    DWORD dwCB = 256;

    DWORD dwRet = RasGetProjectionInfo((HRASCONN)DialUp1->HRasConn,RASP_PppIp,lpProjection,&dwCB);
    if( dwRet == 0 ) strIP = lpProjection->szIpAddress;
    else strIP = "没有取到IP";
    delete lpProjection;
    return strIP;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
    webBrowser->Navigate(WideString(edURL->Text));
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmMain::getDateTimeString()
{
    return FormatDateTime("yyyy-mm-dd hh:nn:ss",Now());
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::InfoLog(const AnsiString & aInfo)
{
    static AnsiString strInfo;
    strInfo = FormatDateTime("yyyy-mm-dd hh:nn:ss ",Now());
    strInfo += aInfo;
    LogInfo->Lines->Add(strInfo);
    Application->ProcessMessages();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Delay(int aCount)
{
    for(int i=0; i<aCount ; i++)
    {
        Sleep(50);
        Application->ProcessMessages();
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::btStopClick(TObject *Sender)
{
    webBrowser->Stop();
    m_RunFlag = false;
    setEnabled(true);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::btCleanClick(TObject *Sender)
{
    LogInfo->Clear();
    LogIP->Clear();       
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::edIntervalChange(TObject *Sender)
{
    m_WaitTime = edInterval->Text.ToIntDef(10);
    if( !m_InitFlag )
    {
        SaveConfig();
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::webBrowserDocumentComplete(TObject *Sender,
      LPDISPATCH pDisp, Variant *URL)
{
    //如果网页装载完成
    m_DownloadComplete = true;
}
//---------------------------------------------------------------------------